/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import dao.SiteJpaController;
import dominio.SiteMd;
import java.util.List;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.Controlador;
import util.NivelAcesso;
import util.Resposta;
import util.Seguranca;



/**
 *
 * @author Bughi
 */
public class SiteCt extends Controlador {

    SiteJpaController dao;


    public SiteCt(HttpServletRequest request, HttpServletResponse response, ServletContext contexto) {
        super(request, response, contexto);
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("intranetJPU");
        dao = new SiteJpaController(emf);     

    }
    
    @Seguranca(nivel = {NivelAcesso.ADMINISTRADOR,NivelAcesso.USUARIO})       
    public void listar() {
        List<SiteMd> sites;
        String filtro = this.getParameterValue("filtro");
        if (filtro != null) {
            sites = dao.findSiteEntities(filtro);
        } else {
            sites = dao.findSiteEntities();
        }

        this.resposta.adicionarAtributo("sites", sites, Resposta.EscopoAtributo.requisicao);
        this.resposta.adicionarAtributo("filtrosite", filtro, Resposta.EscopoAtributo.requisicao);
        this.resposta.definirResposta("visao/siteLista.jsp", Resposta.TipoResposta.encaminhamento);
    }

    @Seguranca(nivel = {NivelAcesso.ADMINISTRADOR})
    public void confirmar() {
        SiteMd site;
        boolean edicao = false;
        if (this.getParameterValue("id") != null) {
            //edicao
            edicao = true;
            site = dao.findSite(Long.parseLong(this.getParameterValue("id")));
        } else {
            //novo
            site = new SiteMd();
        }

        site.setUrl(this.getParameterValue("url").toLowerCase());
        site.setDescricao(this.getParameterValue("descricao").toUpperCase());
                

        if (site.getUrl().length()==0) {
            this.resposta.adicionarErro("nome", "Url deve ser preenchida");
        }      

        if (edicao) {
            try {
                if (this.resposta.existeErro()) {
                    throw new Exception("Corrigir os erros");
                }
                dao.edit(site);                
                this.resposta.definirResposta("listar", Resposta.TipoResposta.redirecionamento);
            } catch (Exception ex) {
                this.resposta.adicionarErro("geral", "Erro: " + ex.getMessage());
                this.resposta.adicionarAtributo("site", site, Resposta.EscopoAtributo.requisicao);
                this.resposta.adicionarAtributo("id", this.getParameterValue("id"), Resposta.EscopoAtributo.requisicao);                
                this.resposta.definirResposta("visao/siteCadastro.jsp", Resposta.TipoResposta.encaminhamento);
            }
        } else {
            try {
                if (this.resposta.existeErro()) {
                    throw new Exception("Corrigir os erros");
                }
                dao.create(site);
                this.resposta.definirResposta("listar", Resposta.TipoResposta.redirecionamento);
            } catch (Exception ex) {
                this.resposta.adicionarErro("geral", "Erro: " + ex.getMessage());
                this.resposta.adicionarAtributo("site", site, Resposta.EscopoAtributo.requisicao);                                
                this.resposta.definirResposta("visao/siteCadastro.jsp", Resposta.TipoResposta.encaminhamento);

            }
        }
    }
    
    @Seguranca(nivel = {NivelAcesso.ADMINISTRADOR})
    public void editar() {
        if (this.getParameterValue("id") != null) {
            SiteMd site = dao.findSite(Long.parseLong(this.getParameterValue("id")));            

            this.resposta.adicionarAtributo("site", site, Resposta.EscopoAtributo.requisicao);
            this.resposta.adicionarAtributo("id", site.getId(), Resposta.EscopoAtributo.requisicao);                        
            this.resposta.definirResposta("visao/siteCadastro.jsp", Resposta.TipoResposta.encaminhamento);
        } else {
            this.resposta.definirResposta("visao/naoautorizado.html", Resposta.TipoResposta.encaminhamento);
        }
    }
    
    @Seguranca(nivel = {NivelAcesso.ADMINISTRADOR})
    public void excluir() {
        Long id = Long.parseLong(this.getParameterValue("id"));
        try {
            dao.destroy(id);            
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        this.resposta.definirResposta("listar", Resposta.TipoResposta.redirecionamento);
    }

    @Seguranca(nivel = {NivelAcesso.ADMINISTRADOR})
    public void incluir() {
        this.resposta.adicionarAtributo("site", new SiteMd(), Resposta.EscopoAtributo.requisicao);                       
        this.resposta.definirResposta("visao/siteCadastro.jsp", Resposta.TipoResposta.encaminhamento);
    }

    public void padrao() {
        this.resposta.definirResposta("visao/naoautorizado.html", Resposta.TipoResposta.encaminhamento);
    }
}
